package com.nurt.dao;

import com.nurt.entity.OrderEntity;

import java.sql.SQLException;
import java.util.List;

/**
 * 订单数据访问接口。
 * 提供了对订单数据的增、删、改、查等操作方法。
 */
public interface OrderDao {

    /**
     * 根据用户ID查询所有订单。
     *
     * @param userId 用户ID。
     * @return 用户的订单列表。
     * @throws SQLException 如果查询过程中发生数据库错误。
     */
    List<OrderEntity> selectOrders(int userId) throws SQLException;

    /**
     * 根据用户ID查询一个订单。
     *
     * @param userId 用户ID。
     * @return 用户的订单实体。
     * @throws SQLException 如果查询过程中发生数据库错误。
     */
    OrderEntity selectOrder(int userId) throws SQLException;

    /**
     * 根据用户ID和订单状态查询一个订单。
     *
     * @param userId 用户ID。
     * @param status 订单状态。
     * @return 符合条件的订单实体。
     * @throws SQLException 如果查询过程中发生数据库错误。
     */
    OrderEntity selectOrderByStatus(int userId, int status) throws SQLException;

    /**
     * 更新订单信息。
     *
     * @param order 需要更新的订单实体。
     * @return 更新影响的行数。
     * @throws SQLException 如果更新过程中发生数据库错误。
     */
    int updateOrder(OrderEntity order) throws SQLException;

    /**
     * 更新订单状态。
     *
     * @param orderId 订单ID。
     * @param status 新的订单状态。
     * @return 更新影响的行数。
     * @throws SQLException 如果更新过程中发生数据库错误。
     */
    int updateOrderStatus(int orderId, int status) throws SQLException;

    /**
     * 插入一个新的订单。
     *
     * @param order 待插入的订单实体。
     * @return 插入的新订单ID。
     * @throws SQLException 如果插入过程中发生数据库错误。
     */
    int insertOrder(OrderEntity order) throws SQLException;
}
